import { Request, Response } from 'express';
import User from '@/models/User';
import { ILoginRequest, IRegisterRequest } from '@/types';
import { UserRole } from '@/consts/role';
import { generateToken } from '@/helps/token';

// 用户登录
export const login = async (req: Request, res: Response): Promise<void> => {
  try {
    const { username, password }: ILoginRequest = req.body;

    // 验证输入
    if (!username || !password) {
      res.status(400).json({
        success: false,
        message: '用户名和密码必填啊！'
      });
      return;
    }

    // 查找用户
    const user = User.findByUsername(username);
    if (!user) {
      res.status(401).json({
        success: false,
        message: '用户名或密码又错了！'
      });
      return;
    }

    if (user.password !== password) {
      res.status(401).json({
        success: false,
        message: '用户名或密码又错了！'
      });
      return;
    }

    const { password: _, ...userWithoutPassword } = user;
    
    res.json({
      success: true,
      message: '恭喜恭喜，登陆成功！',
      data: {
        user: userWithoutPassword,
        token: generateToken(user.id)
      }
    });
  } catch (error) {
    res.status(500).json({
      success: false,
      message: '出问题了，快跑！',
      error: error instanceof Error ? error.message : 'Unknown error'
    });
  }
};

// 用户注册
export const register = async (req: Request, res: Response): Promise<void> => {
  try {
    const userData: IRegisterRequest = req.body;

    // 验证数据
    const validationErrors = User.validate(userData);
    if (validationErrors.length > 0) {
      res.status(400).json({
        success: false,
        message: '又不对咯，再看看！',
        errors: validationErrors
      });
      return;
    }

    const existingUserByUsername = User.findByUsername(userData.username);
    if (existingUserByUsername) {
      res.status(409).json({
        success: false,
        message: '有人叫这个了呢，换一个！'
      });
      return;
    }

    // 检查邮箱是否已存在
    const existingUserByEmail = User.findByEmail(userData.email);
    if (existingUserByEmail) {
      res.status(409).json({
        success: false,
        message: '邮箱又给用了呢，换一个！'
      });
      return;
    }

    // 创建用户
    const newUser = User.create(userData);

    res.status(201).json({
      success: true,
      message: '恭喜恭喜，你也是一个用户了',
      data: {
        user: newUser,
        token: generateToken(newUser.id)
      }
    });
  } catch (error) {
    res.status(500).json({
      success: false,
      message: '出问题了，快跑！',
      error: error instanceof Error ? error.message : 'Unknown error'
    });
  }
};

// 获取当前用户信息
export const getCurrentUser = async (req: Request, res: Response): Promise<void> => {
  try {
    // 这里应该从JWT token中获取用户ID
    // 现在先返回模拟数据
    res.json({
      success: true,
      message: '哟，拿到信息了。',
      data: {
        id: 1,
        username: 'admin',
        email: 'admin@example.com',
        role: UserRole.ADMIN
      }
    });
  } catch (error) {
    res.status(500).json({
      success: false,
      message: '等会再来！，忙的很',
      error: error instanceof Error ? error.message : 'Unknown error'
    });
  }
};

// 用户登出
export const logout = async (req: Request, res: Response): Promise<void> => {
  try {
    // 实际项目中可能需要将token加入黑名单
    res.json({
      success: true,
      message: '退了退了，快走快走！'
    });
  } catch (error) {
    res.status(500).json({
      success: false,
      message: '等会再来！，忙的很',
      error: error instanceof Error ? error.message : 'Unknown error'
    });
  }
};
